const route = require('koa-route')
const axios = require('./xkw-axios')
const filter = require('./filter')

const serverHandler = route.get('/ad/board/:id', async (ctx, id) => {
  // 1.首先根据ID向后端发起请求，获取对应的路径和数据，然后将对应的数据存入redis中，以id+querystring作为key。因为客户端并不会直接传入组件的path，所以这一步是必须的
  const data = await axios.transparentGet(`/board/info/${id}`, ctx)

  // 2.将返回的data存入redis。这里redis起到一个中间store仓库的作用。
  const querystring = ctx.querystring
  const redisKey = `board-id-${id}-query-${querystring || ''}`
  await ctx.$redis.asyncSet(redisKey, JSON.stringify(data))

  // 3.根据返回的路径去渲染对应的组件成HTML，同时传入rediskey。对应的vue组件中会利用redisKey取到对应的data进行渲染
  const path = `${data.path}?rediskey=${redisKey}`
  const renderResult = await ctx.$nuxt.renderRoute(path, ctx)

  // 4.对返回的html字符串过滤处理
  renderResult.html = filter(renderResult.html)

  // 5.向客户端发送结果
  ctx.body = {
    html: renderResult.html
  }
  // await next()
})

module.exports = serverHandler
